/**
 * @file mcu_led.cpp
 * @brief MCU状态LED控制类实现 - 使用FastLED库
 * @version 1.0
 * @author Craft
 */

#include "../include/mcu_led.h"

// 静态成员初始化
MCULEDController* MCULEDController::instance_ = nullptr;

/**
 * @brief 构造函数
 */
MCULEDController::MCULEDController() 
    : initialized_(false)
    , flashEnabled_(false)
    , isOn_(false)
    , cycleStartTime_(0)
{
    // 初始化LED数组为黑色
    mcuLed_[0] = CRGB::Black;
}

/**
 * @brief 获取单例实例
 */
MCULEDController& MCULEDController::instance() {
    if (!instance_) {
        instance_ = new MCULEDController();
    }
    return *instance_;
}

/**
 * @brief 初始化状态LED
 */
bool MCULEDController::initialize() {
    if (initialized_) {
        return true;
    }
    
    Serial.println("[MCU LED] 初始化FastLED版本...");
    
    // 使用独立的FastLED控制器，WS2812使用GRB颜色顺序
    // 注意：MCU LED是WS2812，与主灯带WS2815的颜色顺序不同
    FastLED.addLeds<WS2812, MCU_STATUS_LED_PIN, GRB>(mcuLed_, MCU_LED_COUNT);
    
    // 初始化为关闭状态
    mcuLed_[0] = CRGB::Black;
    FastLED.show();
    
    initialized_ = true;
    Serial.println("[MCU LED] FastLED版本初始化完成");
    
    return true;
}

/**
 * @brief 更新LED效果 - 实现3秒循环，每次亮0.2秒
 */
void MCULEDController::update() {
    if (!initialized_ || !flashEnabled_) {
        return;
    }
    
    uint32_t currentTime = millis();
    uint32_t elapsed = currentTime - cycleStartTime_;
    
    // 添加系统运行时间输出功能 - 每10秒输出一次
    static uint32_t lastSystemInfoTime = 0;
    if (currentTime - lastSystemInfoTime >= 10000) { // 10秒 = 10000ms
        uint32_t uptimeSeconds = currentTime / 1000;
        uint32_t hours = uptimeSeconds / 3600;
        uint32_t minutes = (uptimeSeconds % 3600) / 60;
        uint32_t seconds = uptimeSeconds % 60;
        
        Serial.printf("[运行]：系统运行时间 %02lu:%02lu:%02lu (总计 %lu 秒)\n", 
                     hours, minutes, seconds, uptimeSeconds);
        
        lastSystemInfoTime = currentTime;
    }
    
    if (elapsed < MCU_LED_FLASH_DURATION) {
        // 前0.2秒：亮起蓝色
        if (!isOn_) {
            turnOn();
        }
    } else if (elapsed < MCU_LED_CYCLE_INTERVAL) {
        // 0.2秒到3秒：熄灭
        if (isOn_) {
            turnOff();
        }
    } else {
        // 3秒周期结束，开始新的循环
        cycleStartTime_ = currentTime;
        turnOn();      
    }
}

/**
 * @brief 开始闪烁循环
 */
void MCULEDController::startFlashCycle() {
    if (!initialized_) {
        return;
    }
    
    flashEnabled_ = true;
    cycleStartTime_ = millis();
    turnOn();
    // Serial.println("[MCU LED] 开始2秒循环闪烁 (亮0.1秒蓝色/熄灭1.9秒)");
}

/**
 * @brief 停止闪烁循环
 */
void MCULEDController::stopFlashCycle() {
    flashEnabled_ = false;
    turnOff();
    // Serial.println("[MCU LED] 停止循环闪烁");
}

/**
 * @brief 点亮LED - 蓝色
 */
void MCULEDController::turnOn() {
    // 中等亮度的蓝色，易于观察
    mcuLed_[0] = CRGB(0, 0, 150);  // 蓝色 (RGB: 0,0,50)
    FastLED.show();
    isOn_ = true;
}

/**
 * @brief 熄灭LED
 */
void MCULEDController::turnOff() {
    mcuLed_[0] = CRGB::Black;  // 黑色(关闭)
    FastLED.show();
    isOn_ = false;
}

// ==================== 全局接口函数实现 ====================

bool initMCULED() {
    return MCULEDController::instance().initialize();
}

void updateMCULED() {
    MCULEDController::instance().update();
}

void setMCULEDLowPowerStatus() {
    MCULEDController::instance().startFlashCycle();
}

void stopMCULEDFlash() {
    MCULEDController::instance().stopFlashCycle();
}